(function() {

	var menuAcitveSeqTracing = new Array();// 标签页激活顺序(第一个元素为当前页面ID，第二个为前一页面ID...)
	var tabOptionMap = new Map();

	// 单击标签页
	$(".J_menuTabs").on("click", ".J_menuTab", function() {
		if (!$(this).hasClass("active")) {
			var id = $(this).data("id");

			// 如果不在数组中，代表已经被移除了
			if ($.inArray(id, menuAcitveSeqTracing) < 0)
				return false;

			$(".J_mainContent .J_iframe").each(function() {
				if ($(this).data("id") == id) {
					$(this).show().siblings(".J_iframe").hide();
					return false;
				}
			});
			$(this).addClass("active").siblings(".J_menuTab").removeClass("active");
			setPageTabsContentMargin(this);
			refreshActiveSeq(id);
			activeTabHandle(id);
		}
	});

	// 关闭标签页
	$(".J_menuTabs").on("click", ".J_menuTab i", function() {
		var m = $(this).parents(".J_menuTab").data("id");
		return contabs.closePageById(m);
	});

	function closeTabPageById(id) {
		if (!id)
			return;

		refreshActiveSeq(id, true);
		if (tabOptionMap.has(id)) {
			tabOptionMap.delete(id);
		}

		var currTab;
		$(".J_menuTabs .J_menuTab").each(function() {
			if ($(this).data("id") == id) {
				currTab = $(this);
				return false;
			}
		});

		if (!currTab)
			return;

		if (currTab.hasClass("active")) {
			// 激活前一页面
			if (contabs.getPageActiveSeqTracing().length > 0) {
				var preId = contabs.getPageActiveSeqTracing()[0]
				$(".J_menuTabs .J_menuTab").each(function() {
					if ($(this).data("id") == preId) {
						$(this).addClass("active");
						return false;
					}
				});
				$(".J_mainContent .J_iframe").each(function() {
					if ($(this).data("id") == preId) {
						$(this).show().siblings(".J_iframe").hide();
						return false;
					}
				});
				activeTabHandle(preId);
			}

			currTab.remove();
			$(".J_mainContent .J_iframe").each(function() {
				if ($(this).data("id") == id) {
					$(this).remove();
					return false;
				}
			})
		} else {
			currTab.remove();
			$(".J_mainContent .J_iframe").each(function() {
				if ($(this).data("id") == id) {
					$(this).remove();
					return false;
				}
			});
		}
		setPageTabsContentMargin($(".J_menuTab.active"));
	}

	// 根据选择的标签页自动调整位置
	function setPageTabsContentMargin(n) {
		var preTabsWidth = getWidth($(n).prevAll()), nextTabsWidth = getWidth($(n).nextAll());
		var notTabsWidth = getWidth($(".content-tabs").children().not(".J_menuTabs"));
		var contentTabWidth = $(".content-tabs").outerWidth(true) - notTabsWidth;
		var p = 0;
		// 标签页宽度小于整个标签栏宽度
		if ($(".page-tabs-content").outerWidth() < contentTabWidth) {
			p = 0;
		}
		// 标签页宽度大于整个标签栏宽度
		else {
			if (nextTabsWidth <= (contentTabWidth - $(n).outerWidth(true) - $(n).next().outerWidth(true))) {
				if ((contentTabWidth - $(n).next().outerWidth(true)) > nextTabsWidth) {
					p = preTabsWidth;
					var m = n;
					while ((p - $(m).outerWidth()) > ($(".page-tabs-content").outerWidth() - contentTabWidth)) {
						p -= $(m).prev().outerWidth();
						m = $(m).prev()
					}
				}
			} else {
				if (preTabsWidth > (contentTabWidth - $(n).outerWidth(true) - $(n).prev().outerWidth(true))) {
					p = preTabsWidth - $(n).prev().outerWidth(true)
				}
			}
		}
		$(".page-tabs-content").animate({
			marginLeft : 0 - p + "px"
		}, "fast")
	}

	// 返回元素宽度
	function getWidth(l) {
		var k = 0;
		$(l).each(function() {
			k += $(this).outerWidth(true);
		});
		return k;
	}

	// 刷新页签激活顺序
	function refreshActiveSeq(id, onlyRemove) {
		if (!id)
			return;

		// 在原数组中的顺序
		var seq = $.inArray(id, menuAcitveSeqTracing);
		// 若存在删除
		if (seq >= 0)
			menuAcitveSeqTracing.splice(seq, 1);
		// 插入到第一个
		if (!onlyRemove)
			menuAcitveSeqTracing.splice(0, 0, id);
	}

	// 重置激活顺序
	function clearActiveSeq() {
		menuAcitveSeqTracing = new Array();
	}

	// 激活页面回调
	function activeTabHandle(id) {
		var activeWin = contabs.getPageWinById(id);
		if (activeWin.activeTabHandle && $.isFunction(activeWin.activeTabHandle)) {
			activeWin.activeTabHandle();
		}
	}

	// 关闭所有
	$(".J_tabCloseAll").on("click", function() {
		$(".page-tabs-content").children("[data-id]").each(function() {
			$('.J_iframe[data-id="' + $(this).data("id") + '"]').remove();
			$(this).remove();
		});
		$(".page-tabs-content").css("margin-left", "0");

		clearActiveSeq();
		tabOptionMap.clear();
	})

	// 关闭其他
	$(".J_tabCloseOther").on("click", function() {
		$(".page-tabs-content").children("[data-id]").not(".active").each(function() {
			$('.J_iframe[data-id="' + $(this).data("id") + '"]').remove();
			$(this).remove();

			if (tabOptionMap.has($(this).data("id"))) {
				tabOptionMap.delete($(this).data("id"));
			}
		});
		$(".page-tabs-content").css("margin-left", "0");

		clearActiveSeq();
		refreshActiveSeq(contabs.getActivePageId());

	});

	// 定位到当前TAB页
	$(".J_tabShowActive").on("click", function() {
		setPageTabsContentMargin($(".J_menuTab.active"))
	});

	// 左移
	$(".J_tabLeft").on("click", function() {
		var o = Math.abs(parseInt($(".page-tabs-content").css("margin-left")));
		var l = getWidth($(".content-tabs").children().not(".J_menuTabs"));
		var k = $(".content-tabs").outerWidth(true) - l;
		var p = 0;
		if ($(".page-tabs-content").width() < k) {
			return false
		} else {
			var m = $(".J_menuTab:first");
			var n = 0;
			while ((n + $(m).outerWidth(true)) <= o) {
				n += $(m).outerWidth(true);
				m = $(m).next()
			}
			n = 0;
			if (getWidth($(m).prevAll()) > k) {
				while ((n + $(m).outerWidth(true)) < (k) && m.length > 0) {
					n += $(m).outerWidth(true);
					m = $(m).prev()
				}
				p = getWidth($(m).prevAll())
			}
		}
		$(".page-tabs-content").animate({
			marginLeft : 0 - p + "px"
		}, "fast")
	});

	// 右移
	$(".J_tabRight").on("click", function() {
		var o = Math.abs(parseInt($(".page-tabs-content").css("margin-left")));
		var l = getWidth($(".content-tabs").children().not(".J_menuTabs"));
		var k = $(".content-tabs").outerWidth(true) - l;
		var p = 0;
		if ($(".page-tabs-content").width() < k) {
			return false
		} else {
			var m = $(".J_menuTab:first");
			var n = 0;
			while ((n + $(m).outerWidth(true)) <= o) {
				n += $(m).outerWidth(true);
				m = $(m).next()
			}
			n = 0;
			while ((n + $(m).outerWidth(true)) < (k) && m.length > 0) {
				n += $(m).outerWidth(true);
				m = $(m).next()
			}
			p = getWidth($(m).prevAll());
			if (p > 0) {
				$(".page-tabs-content").animate({
					marginLeft : 0 - p + "px"
				}, "fast")
			}
		}
	});

	var iframeHeight;

	contabs = {
		init : function(options) {
			iframeHeight = options.contentHeight;
			return false;
		},

		// 添加新页签
		// tabOption =
		// {
		// url： URL ,
		// title： 名称 ,
		// icon： 图标 ,
		// isFix： 是否锁定,
		// isPromptReload： 多次打开同一页面，是否提示需要重载页面,
		// success: 打开后回调
		// }
		addNewTab : function(tabOption) {
			if (!tabOption || tabOption.url == undefined || $.trim(tabOption.url).length == 0) {
				return null;
			}
			var isAdd = true, menuId = tabOption.url, url = tabOption.url, icon = tabOption.icon, title = tabOption.title;
			var isFix = tabOption.isFix, isPromptReload = tabOption.isPromptReload;

			$(".J_menuTab").each(function() {
				if ($(this).data("id") == menuId) {
					if (!$(this).hasClass("active")) {
						$(this).addClass("active").siblings(".J_menuTab").removeClass("active");
						setPageTabsContentMargin(this);
						$(".J_mainContent .J_iframe").each(function() {
							if ($(this).data("id") == menuId) {
								$(this).show().siblings(".J_iframe").hide();
								return false;
							}
						})
					}
					isAdd = false;
					return false;
				}
			});
			// 新增
			if (isAdd) {
				var p = '<a href="javascript:;" class="active J_menuTab" data-id="' + menuId + '">';
				// if (icon && typeof (icon) != "undefined" && icon !=
				// "undefined")
				// p = p + ' <span class="J_menuTab_icon icon iconfont ' + icon
				// + '"></span>';
				p = p + ' <span class="J_menuTab_title">' + title + '</span>';
				if (typeof (isFix) == "undefined" || isFix == "undefined" || !isFix)
					p = p + ' <i class="J_menuTab_circle icon iconfont icon-closecircled"></i>';
				p = p + '</a>';
				$(".J_menuTab").removeClass("active");
				var n = '<iframe class="J_iframe" width="100%" height="100%" src="' + url
						+ '" frameborder="0" data-id="' + menuId + '" seamless></iframe>';
				$(".J_mainContent").find("iframe.J_iframe").hide();
				$(".J_mainContent").append(n);
				$(".J_menuTabs .page-tabs-content").append(p);
				setPageTabsContentMargin($(".J_menuTab.active"))
				contabs.fixContentSizes(iframeHeight);
			}
			// 是否重载
			else if (isPromptReload) {
				layer.confirm(jQuery.i18n.prop('message.isReload'), {
					title : '',
					btn : [ jQuery.i18n.prop('label.ok'), jQuery.i18n.prop('label.cancel') ]
				}, function(index) {
					contabs.getActivePageWin().location.reload();
					layer.close(index);
				});
			}

			// 回调事件
			$(contabs.getActivePage()).off('load');
			if (typeof tabOption.success === 'function') {
				$(contabs.getActivePage()).on('load', function() {
					// 返回页面ID和页面Window对象
					tabOption.success(contabs.getActivePageId(), contabs.getActivePageWin());
				});
			}

			tabOptionMap.set(menuId, tabOption);
			refreshActiveSeq(menuId);
			return contabs.getActivePageWin();
		},

		// 调整高度
		fixContentSizes : function(height) {
			$jIframes = $(".J_mainContent").find('.J_iframe');
			$jIframes.css({
				height : height
			});
			$(".J_mainContent").css({
				height : height
			});
			iframeHeight = height;
			return true;
		},

		// 获取当前页
		getActivePage : function() {
			var activePage;
			$(".J_mainContent .J_iframe").each(function() {
				if (!$(this).is(":hidden")) {
					activePage = $(this)[0];
				}
			});
			return activePage;
		},

		// 获取当前页Window
		getActivePageWin : function() {
			var activePage = contabs.getActivePage();
			if (activePage)
				return activePage.contentWindow;
			else
				return null;
		},

		// 获取当前页id
		getActivePageId : function() {
			var id;
			$(".J_menuTabs .J_menuTab").each(function() {
				if ($(this).hasClass("active")) {
					id = $(this).data("id");
				}
			});
			return id;
		},

		// 根据页ID获取页Window
		getPageWinById : function(id) {
			var currTab;
			$(".J_mainContent .J_iframe").each(function() {
				if ($(this).data("id") == id) {
					currTab = $(this);
				}
			});
			if (currTab)
				return currTab[0].contentWindow;
			else
				return null;
		},

		// 返回页面激活顺序
		getPageActiveSeqTracing : function() {
			return menuAcitveSeqTracing;
		},

		// 按SEQ返回页面WIN(0代表当前页面，1代表前一页面)
		getPageWinByTracingSeq : function(seq) {
			if (!seq)
				seq = 0;

			if (seq >= contabs.getPageActiveSeqTracing().length)
				return null;

			return contabs.getPageWinById(contabs.getPageActiveSeqTracing()[seq]);
		},

		// 关闭页面
		closePageById : function(id) {
			if (!id)
				return;

			// 关闭询问
			var isCloseReminding = false;
			var activeWin = contabs.getPageWinById(id);
			if (activeWin.isCloseReminding && $.isFunction(activeWin.isCloseReminding)) {
				isCloseReminding = activeWin.isCloseReminding();
			}

			if (isCloseReminding) {
				layer.confirm(jQuery.i18n.prop('message.isClose'), {
					title : '',
					btn : [ jQuery.i18n.prop('label.ok'), jQuery.i18n.prop('label.cancel') ]
				}, function(index) {
					closeTabPageById(id);
					layer.close(index);
				});
			} else {
				closeTabPageById(id);
			}
		},
		
		// 重绘当前页（部分界面打开时空白）
		repaintActivePage : function() {
			$jIframes = $(".J_mainContent").find("iframe[data-id='" + contabs.getActivePageId() + "']");
			var height = $jIframes.height();
			if (height != iframeHeight)
				height = iframeHeight
			else
				height = iframeHeight - 1;
			
			$jIframes.css({
				height : height
			});
			return true;
		},

	}

	window.contabs = contabs;

}).call(this);